<!DOCTYPE html>
<html lang="en" dir="ltr" class="client-nojs">
<head>
<title>Conformance - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">
<link rel="shortcut icon" href="../../../common/favicon.ico">
<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"c/language/conformance","wgTitle":"c/language/conformance","wgCurRevisionId":136180,"wgArticleId":15688,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":[],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"c/language/conformance","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1,"gadget-MathJax":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:9f05c6caceb9bb1a482b6cebd4c5a330 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]--></head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_conformance skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        <!-- /header -->
        <!-- content -->
<div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
<h1 id="firstHeading" class="firstHeading">Conformance</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../c.html" title="c">c</a>‎ | <a href="../language.html" title="c/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr"><div class="t-navbar" style=""><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../../c.html" title="c"> C</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.html" title="c/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="c/header"> Headers</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../types.html" title="c/types"> Type support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../program.html" title="c/program"> Program utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../variadic.html" title="c/variadic"> Variadic function support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="c/error"> Error handling</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../memory.html" title="c/memory"> Dynamic memory management</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="c/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="c/algorithm"> Algorithms</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="c/numeric"> Numerics</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../chrono.html" title="c/chrono"> Date and time utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="c/io"> Input/output support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="c/locale"> Localization support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="c/thread"> Concurrency support</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental"> Technical Specifications</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../index.html" title="c/symbol index"> Symbol index</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div><div class="t-navbar-head"><a href="../language.html" title="c/language"> C language</a><div class="t-navbar-menu"><div><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="basic_concepts.html" title="c/language/basic concepts">Basic concepts</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../keyword.html" title="c/keyword"> Keywords</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../preprocessor.html" title="c/preprocessor"> Preprocessor</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="statements.html" title="c/language/statements"> Statements</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="expressions.html" title="c/language/expressions"> Expressions</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="initialization.html" title="c/language/initialization"> Initialization</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="declarations.html" title="c/language/declarations"> Declarations</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="functions.html" title="c/language/functions"> Functions</a></td></tr>
<tr class="t-nv-h2"><td colspan="5"> Miscellaneous</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="history.html" title="c/language/history"> History of C</a></td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../experimental.html" title="c/experimental">Technical Specifications</a> </td></tr>
</table></div><div></div></div></div></div><div class="t-navbar-sep"> </div></div>
<p><i>Conformance</i> has a three-fold definition:
</p>
<ul><li> <i>strictly conforming program</i> - uses only well-defined language constructs, that is constructs with a single behavior. It excludes unspecified, undefined, or implementation-defined behavior, and does not exceed any minimum implementation limit.
</li><li> <i>conforming program</i> - acceptable to a conforming implementation.
</li><li> <i>conforming implementation</i> -
<ul><li> A conforming hosted implementation shall accept any strictly conforming program.
</li><li> A conforming freestanding implementation shall accept any strictly conforming program in which the use of the features specified in the library clause (clause 7) is confined to the contents of the freestanding standard library headers (see below).
</li><li> A conforming implementation may have extensions (including additional library functions), provided they do not alter the behavior of any strictly conforming program.
</li></ul>
</li></ul>
<h3><span class="mw-headline" id="Explanation">Explanation</span></h3>
<p>The standard does not define any minimum implementation limit on translation units. A hosted environment has an operating system; a freestanding environment does not. A program running in a hosted environment may use all features described in the library clause (clause 7); a program running in a freestanding environment may use a subset of library features required by clause 4.
</p>
<h4><span class="mw-headline" id="Freestanding_standard_library_headers">Freestanding standard library headers</span></h4>
<p>All standard library features in every fully freestanding header are required to be provided by a freestanding implementation.
</p>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c23"><td>
<p>Some standard library headers are conditionally freestanding.
</p>
<ul><li> If the implementation predefines the macro <code>__STDC_IEC_60559_BFP__</code> or <code>__STDC_IEC_60559_BFP__</code>, then
<ul><li> <code>&lt;math.h&gt;</code> and <code>&lt;fenv.h&gt;</code> are fully freestanding headers, and
</li><li> <code>&lt;stdlib.h&gt;</code> is a partially freestanding header.
</li></ul>
</li></ul>
<p>In a partially freestanding header, only a part of standard library features are required to be provided by a freestanding implementation.
</p>
<ul><li> <a href="../string/byte/strdup.html" title="c/string/byte/strdup"><tt>strdup</tt></a>, <a href="../string/byte/strndup.html" title="c/string/byte/strndup"><tt>strndup</tt></a>, <span class="t-lc"><a href="../string/byte/strcoll.html" title="c/string/byte/strcoll">strcoll</a></span>, <span class="t-lc"><a href="../string/byte/strxfrm.html" title="c/string/byte/strxfrm">strxfrm</a></span>, and <span class="t-lc"><a href="../string/byte/strerror.html" title="c/string/byte/strerror">strerror</a></span> are not required to be provided by a freestanding implementation.
</li><li> When <code>__STDC_IEC_60559_BFP__</code> or <code>__STDC_IEC_60559_BFP__</code> are predefined, in <code>&lt;stdlib.h&gt;</code>, only numeric conversion functions (<code>ato<i>X</i></code>, <code>strto<i>X</i></code>, and <code>strfrom<i>X</i></code>) are required to be provided by a freestanding implementation.
</li></ul>
</td>
<td><span class="t-mark-rev t-since-c23">(since C23)</span></td></tr>
</table>
<table class="t-dsc-begin">

<tr>
<td colspan="2"> <h5> <span class="mw-headline" id="Fully_freestanding_standard_library_headers">  Fully freestanding standard library headers </span></h5>
</td></tr>

<tr class="t-dsc">
<td> <code><b>&lt;float.h&gt;</b></code>
</td>
<td> <a href="../types/limits.html#Limits_of_floating_point_types" title="c/types/limits">Limits of floating-point types</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;iso646.h&gt;</b></code> <span class="t-mark-rev t-since-c95">(C95)</span>
</td>
<td> <a href="operator_alternative.html" title="c/language/operator alternative"> Alternative operator spellings</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;limits.h&gt;</b></code>
</td>
<td> <a href="../types/limits.html" title="c/types/limits">Ranges of integer types</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;stdalign.h&gt;</b></code> <span class="t-mark-rev t-since-c11">(C11)</span>
</td>
<td> <a href="../types.html" title="c/types"><code>alignas</code> and <code>alignof</code></a> convenience macros
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;stdarg.h&gt;</b></code>
</td>
<td> <a href="../variadic.html" title="c/variadic">Variable arguments</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;stdbool.h&gt;</b></code> <span class="t-mark-rev t-since-c99">(C99)</span>
</td>
<td> <a href="../types.html" title="c/types">Macros for boolean type</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;stddef.h&gt;</b></code>
</td>
<td> <a href="../types.html" title="c/types">Common macro definitions</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;stdint.h&gt;</b></code> <span class="t-mark-rev t-since-c99">(C99)</span>
</td>
<td> <a href="../types/integer.html" title="c/types/integer">Fixed-width integer types</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;stdnoreturn.h&gt;</b></code> <span class="t-mark-rev t-since-c11">(C11)</span>
</td>
<td> <a href="../types.html" title="c/types"><tt>noreturn</tt></a> convenience macro
</td></tr>



<tr>
<td colspan="2"> <h5> <span class="mw-headline" id="Partially_freestanding_standard_library_headers">  Partially freestanding standard library headers </span></h5>
</td></tr>

<tr class="t-dsc">
<td> <code><b>&lt;string.h&gt;</b></code> <span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td> <a href="../string/byte.html" title="c/string/byte">String handling</a>
</td></tr>



<tr>
<td colspan="2"> <h5> <span class="mw-headline" id="Conditionally_fully_freestanding_standard_library_headers">  Conditionally fully freestanding standard library headers </span></h5>
</td></tr>

<tr class="t-dsc">
<td> <code><b>&lt;fenv.h&gt;</b></code> <span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td> <a href="../numeric/fenv.html" title="c/numeric/fenv">Floating-point environment</a>
</td></tr>


<tr class="t-dsc">
<td> <code><b>&lt;math.h&gt;</b></code> <span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td> <a href="../numeric/math.html" title="c/numeric/math">Common mathematics functions</a>
</td></tr>



<tr>
<td colspan="2"> <h5> <span class="mw-headline" id="Conditionally_partially_freestanding_standard_library_headers">  Conditionally partially freestanding standard library headers </span></h5>
</td></tr>

<tr class="t-dsc">
<td> <code><b>&lt;stdlib.h&gt;</b></code> <span class="t-mark-rev t-since-c23">(C23)</span>
</td>
<td> General utilities: <a href="../memory.html" title="c/memory">memory management</a>, <a href="../program.html" title="c/program">program utilities</a>, <a href="../string.html" title="c/string">string conversions</a>, <a href="../numeric/random.html" title="c/numeric/random">random numbers</a>, <a href="../algorithm.html" title="c/algorithm">algorithms</a>
</td></tr>

</table>
<h3><span class="mw-headline" id="References">References</span></h3>
<div class="t-ref-std-17">
<ul><li> C17 standard (ISO/IEC 9899:2018): 
</li></ul>
<dl><dd><ul><li> 4 Conformance (p: 4)
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-11">
<ul><li> C11 standard (ISO/IEC 9899:2011): 
</li></ul>
<dl><dd><ul><li> 4 Conformance (p: 8-9)
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-c99">
<ul><li> C99 standard (ISO/IEC 9899:1999): 
</li></ul>
<dl><dd><ul><li> 4 Conformance (p: 7-8)
</li></ul>
</dd></dl>
</div>
<div class="t-ref-std-c89">
<ul><li> C89/C90 standard (ISO/IEC 9899:1990): 
</li></ul>
<dl><dd><ul><li> 1.7 Compliance 
</li></ul>
</dd></dl>
</div>
<h3><span class="mw-headline" id="See_also">See also</span></h3>
<table class="t-dsc-begin">

</table>

<!-- 
NewPP limit report
Preprocessor visited node count: 1208/1000000
Preprocessor generated node count: 4329/1000000
Post‐expand include size: 29693/2097152 bytes
Template argument size: 7488/2097152 bytes
Highest expansion depth: 13/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:15688-0!*!0!!en!*!* and timestamp 20220313075103 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="https://en.cppreference.com/mwiki/index.php?title=c/language/conformance&amp;oldid=136180">https://en.cppreference.com/mwiki/index.php?title=c/language/conformance&amp;oldid=136180</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        <div id="cpp-footer-base" class="noprint">
            <div id="footer">
                        <div id="cpp-navigation">
            <h5>Navigation</h5>
            <ul><li><a href="https://en.cppreference.com/w/c/language/conformance">Online version</a></li><li>Offline version retrieved 2022-07-30 14:05.</li></ul></div>
                        <ul id="footer-info">
                                    <li id="footer-info-lastmod"> This page was last modified on 8 December 2021, at 02:26.</li>
                                    <li id="footer-info-viewcount">This page has been accessed 13,057 times.</li>
                            </ul>
                    </div>
        </div>
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler","ext.gadget.MathJax"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>
<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.200 secs. -->
	</body>
<!-- Cached 20220313075103 -->
</html>